package com.xwaf.platform.system.api.service.hander;

import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import javax.annotation.PreDestroy;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * 
 * <p>
 * 不同女孩处理器
 * <p>
 * 
 * @author 李聪 <br>
 * @email xwaf_love@yeah.net <br>
 * @since JDK 1.8<br>
 * @date 2019年12月27日 下午8:34:11 <br>
 * @see 无<br>
 *      Copyright (c) 2019, xwaf_love@yeah.net All Rights Reserved.<br>
 */
@Component("girlHandlerFactory")
public class GirlHandlerFactory {

	/**
	 * 注入所有女孩的实现
	 */
	@Autowired(required = false)
	private List<GirlHandler> girlHandlers;

	/**
	 * 处理器容器
	 */
	private static final Map<String, GirlHandler> services = new ConcurrentHashMap<String, GirlHandler>();

	@PreDestroy
	public void destory() {
		services.clear();
	}

	/**
	 * 
	 * <p>
	 * 获取对应女孩实例
	 * <p>
	 * 
	 * @author 李聪 <br>
	 * @email xwaf_love@yeah.net <br>
	 * @since JDK 1.8<br>
	 * @date 2019年12月27日 下午8:34:49 <br>
	 * @see 无<br>
	 * @param key
	 * @return
	 * @demo <br>
	 */
	public GirlHandler getService(String key) {
		System.out.println("getService:" + key);
		if (!services.containsKey(key)) {
			productFactory(key);
		}
		return services.get(key);
	}

	/**
	 * 
	 * <p>
	 * 生产女孩处理器
	 * <p>
	 * 
	 * @author 李聪 <br>
	 * @email xwaf_love@yeah.net <br>
	 * @since JDK 1.8<br>
	 * @date 2019年12月27日 下午8:35:16 <br>
	 * @see 无<br>
	 * @param key
	 * @demo <br>
	 */
	private void productFactory(String key) {
		System.out.println("productFactory:" + key + ",girlHandlers:" + girlHandlers);
		if (girlHandlers == null) {
			// 集合为空 不作处理
			return;
		}
		for (GirlHandler handler : girlHandlers) {
			if (handler.supports(key)) {// 找到处理器，保存 并执行处理器
				services.put(key, handler);
			}
		}
	}
}
